package com.cwt.sso.genericity;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

/**
 * @author chenwt
 * @version V1.0
 * @describe 【泛型定义】
 * @date 2023年08月22日 09:53:30
 */
@Component
public class GenericityConfig implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(GenericityConfig.class);

    @Override
    public void run(String... args) throws Exception {
        logger.warn("泛型的本质就是类型参数化 >> 所操作的数据类型被指定为一个参数");
        logger.warn("所有的泛型方法声明都有一个类型声明部分， 由尖括号间隔， 该类型参数声明部分在方法返回类型之前。");
        logger.warn("类型参数可以在代码中表示不同的类型，使得代码变得更加通用、可重用和类型安全。");

        logger.info("上界限制\n" +
                "上界限制用来限制类型参数的范围，表示类型参数必须是指定类型或指定类型的子类。例如：\n" +
                "class MyGenericClass<T extends Number> {}", "");

        logger.info("下界限制\n" +
                "下界限制用来限制类型参数的范围，表示类型参数必须是指定类型或指定类型的父类。例如：\n" +
                "void myMethod(List<? super Integer> myList) {}", "");
    }

}
